package cn.edu.dyxy.controller;

import cn.edu.dyxy.entity.Book;
import cn.edu.dyxy.entity.CartItem;
import cn.edu.dyxy.service.BookService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

/**
 * @author JokerQiu
 * @date 2021年12月24日 11:20
 */
@WebServlet("/buyBook")
public class BuyBookServlet extends HttpServlet {
    private BookService bookService = new BookService();

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("BuyBookServlet");
        /**
         * 1、获取图书id
         * 2、创建购物车
         * 3、把图书加入到购物车中
         * 4、返回数据
         */
        //1、获取图书id
        String bookId = req.getParameter("bookId");
        System.out.println(bookId);
        //获取图书信息
        Book book = bookService.getBookById(bookId);
        //创建购物车
        HttpSession session = req.getSession();
        Map<String, CartItem> cart =
                (Map<String, CartItem>) session.getAttribute("cart");
        // 将商品添加到购物车，判断购物车是否存在
        if (cart != null) {
            // 从购物车获取该商品
            CartItem cartItem = cart.get(bookId);
            // 判断商品是不是第一次添加
            if (cartItem != null) {
                // 非第一次添加，数量加1
                cartItem.setAmount(cartItem.getAmount() + 1);
            } else {
                // 第一次添加，构建商品信息，并保存到购物车
                createItem(bookId, book, cart);
            }
        } else {
            // 购物车不存在情况，先创建购物车，再添加商品到购物车
            cart = new HashMap<String, CartItem>();
            session.setAttribute("cart", cart);
            createItem(bookId, book, cart);
        }
       
        //返回结果
        resp.setCharacterEncoding("UTF-8");
        PrintWriter pw = resp.getWriter();
        pw.write("添加到购物车成功");
    }

    /**
     * 把图书添加到购物车的方法
     *
     * @param bookId
     * @param book
     * @param cart
     */
    private void createItem(String bookId, Book book, Map<String, CartItem> cart) {
        CartItem cartItem = new CartItem();

        cartItem.setId(book.getId());
        cartItem.setBookName(book.getProductName());
        cartItem.setFixedPrice(book.getFixedPrice());
        cartItem.setDangPrice(book.getDangPrice());
        cartItem.setAmount(1);
        cart.put(bookId, cartItem);
    }
}
